package com.ecommerce.user.dto;

import com.ecommerce.user.entity.User;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.AfterMapping;

import java.util.List;

/**
 * 用户映射器
 */
@Mapper(componentModel = "spring")
public interface UserMapper {

    /**
     * 实体转响应DTO
     * @param user 用户实体
     * @return 用户响应DTO
     */
    @Mapping(source = "phone", target = "phone")
    @Mapping(source = "avatar", target = "avatar")
    @Mapping(source = "nickname", target = "nickname")
    @Mapping(source = "address", target = "address")
    UserResponse entityToResponseDto(User user);

    /**
     * 实体列表转响应DTO列表
     * @param users 用户实体列表
     * @return 用户响应DTO列表
     */
    List<UserResponse> entityToResponseDtoList(List<User> users);

    /**
     * 更新实体
     * @param user 用户实体
     * @param userResponse 用户响应DTO
     */
    @Mapping(target = "password", ignore = true)
    void updateEntity(@MappingTarget User user, UserResponse userResponse);

    /**
     * 设置别名字段以确保兼容性
     * @param user 用户实体
     * @param userResponse 用户响应DTO
     */
    @AfterMapping
    default void setAliasFields(User user, @MappingTarget UserResponse userResponse) {
        // 设置别名字段以确保兼容性
        userResponse.setUserId(userResponse.getId()); // 设置userId别名
        userResponse.setPhoneNumber(userResponse.getPhone()); // 设置phoneNumber别名
        userResponse.setAvatarUrl(userResponse.getAvatar()); // 设置avatarUrl别名
        userResponse.setNickName(userResponse.getNickname()); // 设置nickName别名
    }
}